#include "thememodesetwin.h"
#include "nddsetting.h"
#include "styleset.h"
#include "syntaxthememanager.h"
#include "ccnotepad.h"
#include <QDebug>
#include <QTimer>

ThemeModeSetWin::ThemeModeSetWin(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);
	
	// 隐藏语法主题选择（自动跟随UI主题）
	ui.syntaxThemeGroup->setVisible(false);
	
	// 连接UI主题切换信号
	connect(ui.themeModeCombo, QOverload<int>::of(&QComboBox::currentIndexChanged),
	        this, &ThemeModeSetWin::slot_themeModeChanged);
	
	// 加载当前设置
	loadCurrentSettings();
}

ThemeModeSetWin::~ThemeModeSetWin()
{
}

void ThemeModeSetWin::loadCurrentSettings()
{
	// 阻止信号，避免初始化时触发主题切换
	ui.themeModeCombo->blockSignals(true);
	
	// 只保留跟随系统选项，始终设置为跟随系统
	ui.themeModeCombo->setCurrentIndex(0);
	
	// 如果当前不是跟随系统，则切换到跟随系统
	int currentSkinId = StyleSet::getCurrentSytleId();
	if (currentSkinId != SYSTEM_THEME) {
		StyleSet::setSkin(SYSTEM_THEME);
		NddSetting::updataKeyValueFromNumSets(SKIN_KEY, SYSTEM_THEME);
	}
	
	// 显示当前状态
	bool systemIsDark = StyleSet::isSystemDarkMode();
	QString currentTheme = StyleSet::getCurrentStyle();
	
	QString statusMsg = tr("当前: %1（跟随系统，代码配色自动匹配）")
	                    .arg(currentTheme);
	ui.statusLabel->setText(statusMsg);
	
	// 恢复信号
	ui.themeModeCombo->blockSignals(false);
}

void ThemeModeSetWin::saveSettings()
{
	int themeMode = ui.themeModeCombo->currentIndex();
	NddSetting::updataKeyValueFromNumSets(THEME_MODE, themeMode);
}

void ThemeModeSetWin::slot_themeModeChanged(int index)
{
	// 只支持跟随系统（index 始终为 0）
	Q_UNUSED(index);
	
	// 确保设置为跟随系统
	StyleSet::setSkin(SYSTEM_THEME);
	NddSetting::updataKeyValueFromNumSets(SKIN_KEY, SYSTEM_THEME);
	saveSettings();
	
	// 立即更新当前编辑器（只更新当前标签页，很快）
	notifyEditorsUpdate();
	
	// 更新状态标签
	bool systemIsDark = StyleSet::isSystemDarkMode();
	QString currentTheme = StyleSet::getCurrentStyle();
	QString msg = tr("当前: %1（跟随系统，代码配色自动匹配）")
	              .arg(currentTheme);
	ui.statusLabel->setText(msg);
}

void ThemeModeSetWin::slot_syntaxThemeChanged(int index)
{
	// 语法主题现在自动跟随UI主题，此函数暂时保留但不使用
	Q_UNUSED(index);
}

void ThemeModeSetWin::slot_applyTheme()
{
	// 重新应用当前选择的主题模式
	slot_themeModeChanged(ui.themeModeCombo->currentIndex());
	
	QString currentTheme = StyleSet::getCurrentStyle();
	QString syntaxTheme = SyntaxThemeManager::instance()->getCurrentSyntaxThemeName();
	
	ui.statusLabel->setText(tr("✅ 已应用！界面: %1 | 代码: %2")
	                        .arg(currentTheme)
	                        .arg(syntaxTheme));
	
	qDebug() << "Theme applied - UI:" << currentTheme << "| Syntax:" << syntaxTheme;
}

void ThemeModeSetWin::notifyEditorsUpdate()
{
	// 查找主窗口
	QWidget* p = parentWidget();
	int depth = 0;
	CCNotePad* mainWin = nullptr;
	
	while (p != nullptr && depth < 10)
	{
		mainWin = qobject_cast<CCNotePad*>(p);
		if (mainWin != nullptr)
		{
			break;
		}
		p = p->parentWidget();
		depth++;
	}
	
	if (mainWin != nullptr)
	{
		// 直接同步更新（只更新当前标签页，非常快~10ms）
		mainWin->updateThemes();
	}
}

void ThemeModeSetWin::scheduleEditorUpdate()
{
	// 此函数已废弃，保留向后兼容
}

